#ifndef _XX_YY_BMOCK_IN_OUT_RAW_MEM_PTR
#define _XX_YY_BMOCK_IN_OUT_RAW_MEM_PTR
#include "bmock_in_out_arg_val.hpp"
#include "bmock_out_raw_mem_ptr.hpp"

namespace bmock {
	struct in_out_raw_mem_ptr : public out_arg_val {
		            in_out_raw_mem_ptr(const char *const n,const raw_mem &rm);
					~in_out_raw_mem_ptr();
	protected:
		std::string get_in_value(const arg_checker &chk) const;
		std::string get_in_value() const;
		std::string get_out_value(const arg_checker &chk) const;
		bool        validate(const arg_checker &chk,const std::string &v) const;
		bool		validate_no_msg(const arg_checker &chk, const std::string &v) const;
		bool        update_out_value(const arg_checker &chk,const std::string &v) const;
		bool        null_supplied() const;
		void        print(std::ostream &os) const;
		void        update(const std::string &v,const control_tools_ptr&,int index) const;

		raw_mem     rm_;
	};
}

#include <boost/preprocessor/stringize.hpp>

#define __BMOCK_USE_RAW_IN_OUT(ARG,LEN)\
	new bmock::in_out_raw_mem_ptr(BOOST_PP_STRINGIZE(ARG),bmock::raw_mem(ARG,LEN))

#endif